The IEEE 1394-1995 standard, “1394-1995 Standard For A High Performance Serial Bus,” is an international standard for implementing an inexpensive high-speed serial bus architecture which supports both asynchronous and isochronous format data transfers. Isochronous data transfers are real-time transfers which take place such that the time intervals between significant instances have the same duration at both the transmitting and receiving applications. Each packet of data transferred isochronously is transferred in its own time period. An example of an ideal application for the transfer of data isochronously would be from a video recorder to a television set. The video recorder records images and sounds and saves the data in discrete chunks or packets. The video recorder then transfers each packet, representing the image and sound recorded over a limited time period, during that time period, for display by the television set. The IEEE 1394-1995 standard bus architecture provides multiple channels for isochronous data transfer between applications. A six bit channel number is broadcast with the data to ensure reception by the appropriate application. This allows multiple applications to concurrently transmit isochronous data across the bus structure. Asynchronous transfers are traditional data transfer operations which take place as soon as possible and transfer an amount of data from a source to a destination.
The IEEE 1394-1995 standard provides a high-speed serial bus for interconnecting digital devices thereby providing a universal I/O connection. The IEEE 1394-1995 standard defines a digital interface for the applications thereby eliminating the need for an application to convert digital data to analog data before it is transmitted across the bus. Correspondingly, a receiving application will receive digital data from the bus, not analog data, and will therefore not be required to convert analog data to digital data. The cable required by the IEEE 1394-1995 standard is very thin in size compared to other bulkier cables used to connect such devices. Devices can be added and removed from an IEEE 1394-1995 bus while the bus is active. If a device is so added or removed the bus will then automatically reconfigure itself for transmitting data between the then existing nodes. A node is considered a logical entity with a unique address on the bus structure. Each node provides an identification ROM, a standardized set of control registers and its own address space.
The IEEE 1394-1995 cable environment is a network of nodes connected by point-to-point links, including a port on each node's physical connection and the cable between them. The physical topology for the cable environment of an IEEE 1394-1995 serial bus is a non-cyclic network of multiple ports, with finite branches. The primary restriction on the cable environment is that nodes must be connected together without forming any closed loops.
The IEEE 1394-1995 cables connect ports together on different nodes. Each port includes terminators, transceivers and simple logic. A node can have multiple ports at its physical connection. The cable and ports act as bus repeaters between the nodes to simulate a single logical bus. The cable physical connection at each node includes one or more ports, arbitration logic, a resynchronizer and an encoder. Each of the ports provide the cable media interface into which the cable connector is connected. The arbitration logic provides access to the bus for the node. The resynchronizer takes received data-strobe encoded data bits and generates data bits synchronized to a local clock for use by the applications within the node. The encoder takes either data being transmitted by the node or data received by the resynchronizer, which is addressed to another node, and encodes it in data-strobe format for transmission across the IEEE 1394-1995 serial bus. Using these components, the cable physical connection translates the physical point-to-point topology of the cable environment into a virtual broadcast bus, which is expected by higher layers of the system. This is accomplished by taking all data received on one port of the physical connection, resynchronizing the data to a local clock and repeating the data out of all of the other ports from the physical connection.
When transmitting isochronous data between two devices, each packet of isochronous data is time-stamped with the current bus time of the cycle in which the packet is transmitted. If not received by the receiving device in the correct cycle, the packet is typically discarded by the receiving device and the data is lost. This is especially true when transmitting video data which is very time sensitive. When transmitting frames of video data, the first packet of the received frames of data have to be received within a recognized boundary of time as compared to the time stamp value of the packet. If the first packet of the frame is received outside of this boundary, the entire frame is generally discarded and not processed by the receiving device.
The value of this time stamp is acquired from the cycle time register, within the transmitting device, which maintains the current bus time for a node. The cycle time register includes a second_count field and a cycle_count field which together form a value representing the current cycle. This cycle value is incremented on each carry from a cycle_offset field. The cycle_offset field is updated on each transition of the system clock. On the transition after the value within the cycle_offset field is equal to 3071, the value within this field wraps around to zero and the value within the cycle_count field is incremented. The value within the cycle offset field is a fractional part of the current isochronous cycle. When transmitting data from an application within the node, the application must obtain the current bus time from the cycle time register, then load the current bus time value into the packet and transmit the packet over the IEEE 1394-1995 serial bus to the receiving node. Within the transmitting node, there can be a substantial delay between the time in which the current bus time value is sent from the cycle time register and the time at which the application receives the current bus time value from the cycle time register, inserts it into the packet and actually transmits the packet over the IEEE 1394-1995 serial bus network. If this delay is significant, the current bus time value received by the application may be obsolete and outside of the appropriate boundary of time, by the time the packet is actually transmitted, causing the transmitted packets to be discarded by the receiving device.
What is needed is a method of and apparatus for ensuring that transmitted packets will be received by the receiving device within the appropriate boundary of time in-order that the packets are properly processed by the receiving device and not discarded. What is further needed is a method of and apparatus for predicting the current bus time value corresponding to the actual transmission of isochronous packets from a node on an IEEE 1394-1995 serial bus.